home *** CD-ROM | disk | FTP | other *** search
/ Megadoom II / MEGADOOM II - iso.7z / MEGADOOM II.ISO / doom / editors / wadfile / warm11 / dmglobal.i < prev    next >
Text File  |  1994-12-21  |  8KB  |  278 lines

  1. /******************************************************************************
  2.     INCLUDE:    DMGLOBAL.I
  3.     WRITTEN BY:    Robert Fenske, Jr. (rfenske@swri.edu)
  4.                 Southwest Research Institute
  5.                 Electromagnetics Division
  6.                 6220 Culebra
  7.                 San Antonio, Texas 78238-5166
  8.     CREATED:    Mar. 1994
  9.     DESCRIPTION:    This include file contains all the necessary constant,
  10.             macro, syntax, and type definitions as well as all
  11.             external and global variables needed for the various
  12.             DOOM-related utility programs.
  13.  
  14.             DOOM is a trademark of id Software, Inc.
  15. ******************************************************************************/
  16. #if !defined(DM_Globals)
  17.  
  18. #undef ANSI_C
  19. #if defined(__STDC__) || defined(__OS2__)
  20. #define ANSI_C        1
  21. #endif
  22.  
  23. #if !defined(__OS2__)
  24. #define _Optlink
  25. #endif
  26.  
  27. /*===========================================================================*/
  28.  
  29. #define bcase        break;case        /* for a more reasonabble */
  30. #define bdefault    break;default        /* switch statement       */
  31. #define global                    /* global declarations */
  32. #define forward        extern            /* forward references */
  33. #define local        static            /* local declarations */
  34. #define otherwise    break;default        /* alternate default case */
  35. #define repeat        do
  36. #define until(expr)    while (!(expr))        /* for do ... until loops */
  37.  
  38. /*===========================================================================*/
  39.  
  40. typedef unsigned short    ushort;
  41. typedef unsigned int    boolean;        /* integer used as boolean */
  42. typedef short        word;            /* 16-bit word */
  43. typedef word        bams;            /* 16-bit bams */
  44.  
  45. /*===========================================================================*/
  46.  
  47. #undef PI
  48. #define PI        (double)3.14159265358979323846    /* ubiquitous PI */
  49. #define TWOPI        (double)6.28318530717958647693
  50. #define bams_to_deg    (double)0.00549316406250000000    /* angle conv consts */
  51. #define deg_to_bams   (double)182.04444444444444444444
  52. #define bams_to_rad    (double)0.00009587379924285258
  53. #define rad_to_bams (double)10430.37835047045272494957
  54. #define deg_to_rad    (double)0.01745329251994329577
  55. #define rad_to_deg     (double)57.29577951308232087680
  56. #define BAMS180        ((bams)0x8000)        /* BAMS: (-)180 degrees */
  57. #define BAMS090        ((bams)0x4000)        /* BAMS: 90 degrees */
  58.  
  59. #define FALSE        0
  60. #define TRUE        (!FALSE)
  61.  
  62. /*===========================================================================*/
  63. #if !defined(__OS2__)
  64. #define abs(a)        ((a) < 0 ? -(a) : (a))
  65. #define min(a,b)    ((a) < (b) ? (a) : (b))
  66. #define max(a,b)    ((a) < (b) ? (b) : (a))
  67. #endif
  68. #define numbytes(v)    ((unsigned)sizeof(v))
  69. #define numelm(a)    (sizeof a / sizeof a[0])
  70. #define sgn(a)        ((0<(a))-((a)<0))
  71.  
  72.     /* the blockmem() routine must allocate and zero memory */
  73. #if defined(__OS2__)
  74. #include <string.h>
  75. #define blockmem(t,n)    (t *)(0<(n)?calloc((unsigned)(n),sizeof(t)):NULL)
  76. #define blockfree(b)    (free((char *)(b)))
  77. #define blockcopy(bt,bf,n) (void)memcpy((char *)(bt),(char *)(bf),(int)(n))
  78. #elif defined(sun)
  79. #define blockmem(t,n)    (t *)(0<(n)?calloc((unsigned)(n),sizeof(t)):NULL)
  80. #define blockfree(b)    ((b)!=NULL?free((char *)(b)):0)
  81. #define blockcopy(bt,bf,n) (void)memcpy((char *)(bt),(char *)(bf),(int)(n))
  82. #else
  83. #define blockmem(t,n)    (t *)(0<(n)?calloc((unsigned)(n),sizeof(t)):NULL)
  84. #define blockfree(b)    ((b)!=NULL?free((char *)(b)):(void)0)
  85. #define blockcopy(bt,bf,n) (void)memcpy((char *)(bt),(char *)(bf),(int)(n))
  86. #endif
  87.  
  88. /*===========================================================================*/
  89.  
  90. typedef struct DOOM_THING {            /* thing information */
  91.     short x, y;
  92.     short angle;
  93.     short item;
  94.     short flag;
  95. } DOOM_THING;
  96.  
  97. typedef struct DOOM_LINE {            /* line information */
  98.     short fndx, tndx;
  99.     short flag, action_flag;
  100.     short sect_tag;
  101.     short rsidndx, lsidndx;
  102. } DOOM_LINE;
  103.  
  104. typedef struct DOOM_SIDE {            /* side information */
  105.     short image_xoff, image_yoff;
  106.     char lwall[8], uwall[8], nwall[8];
  107.     short sectndx;
  108. } DOOM_SIDE;
  109.  
  110. typedef struct DOOM_VERT {            /* vertex information */
  111.     short x, y;
  112. } DOOM_VERT;
  113.  
  114. typedef struct DOOM_SEGS {            /* segment information */
  115.     short fndx, tndx;
  116.     bams angle;
  117.     short lndx;
  118.     short sndx;
  119.     short loffset;
  120. } DOOM_SEGS;
  121.  
  122. typedef struct DOOM_SSECTOR {            /* subsector information */
  123.     short count;
  124.     short sndx;
  125. } DOOM_SSECTOR;
  126.  
  127. typedef struct DOOM_NODE {            /* node information */
  128.     short x, y;
  129.     short xdel, ydel;
  130.     short rymax, rymin, rxmin, rxmax;
  131.     short lymax, lymin, lxmin, lxmax;
  132.     short nndx[2];
  133. } DOOM_NODE;
  134.  
  135. typedef struct DOOM_SECTOR {            /* sector information */
  136.     short floor_ht, ceil_ht;
  137.     char floor_desc[8], ceil_desc[8];
  138.     short light_lvl;
  139.     short property;
  140.     short line_tag;
  141. } DOOM_SECTOR;
  142.  
  143. typedef unsigned char    DOOM_REJECT;        /* reject information */
  144.  
  145. typedef short        DOOM_BLOCKMAP;        /* block map information */
  146.  
  147. /*===========================================================================*/
  148.  
  149. #define MAINS        0
  150. #define THINGS        1
  151. #define LINES        2
  152. #define SIDES        3
  153. #define VERTS        4
  154. #define SEGS        5
  155. #define SSECTS        6
  156. #define NODES        7
  157. #define SECTS        8
  158. #define REJECTS        9
  159. #define BLKMAPS        10
  160. #define ALL        11
  161.  
  162. typedef struct WAD_HEAD {            /* WAD file header */
  163.     char ident[4];
  164.     long count;
  165.     long offset;
  166. } WAD_HEAD;
  167.  
  168. typedef struct DIR_ENTRY {            /* WAD file directory entry */
  169.     long offset;
  170.     long nbytes;
  171.     char name[8];
  172. } DIR_ENTRY;
  173.  
  174. typedef struct WAD_INFO {            /* WAD file information */
  175.     FILE *fp;                    /* file pointer */
  176.     int type;                    /* (I/P)WAD,patch */
  177.     WAD_HEAD head;                    /* file header */
  178.     DIR_ENTRY *origdir,                /* orig directory */
  179.               *dir;                    /* resources dirctry */
  180.     char **data;                    /* resources data */
  181.     boolean *changed;                /* rsrce changed flg */
  182.     long *count;                    /* resources size */
  183.     int ep, mp;                    /* cur episode/map */
  184.     double ver;                    /* patch version */
  185. } WAD_INFO;
  186.  
  187. /*===========================================================================*/
  188.  
  189. extern void resource_update(
  190. #if defined(ANSI_C)
  191.     register WAD_INFO *winfo,
  192.     int entry,
  193.     void *data,
  194.     long count
  195. #endif
  196. );
  197. extern int resource_count(
  198. #if defined(ANSI_C)
  199.     register DIR_ENTRY *entry
  200. #endif
  201. );
  202. extern boolean patch_read(
  203. #if defined(ANSI_C)
  204.     register WAD_INFO *winfo,
  205.     int entry,
  206.     long resources_needed
  207. #endif
  208. );
  209. extern boolean patch_write(
  210. #if defined(ANSI_C)
  211.     register WAD_INFO *oinfo,
  212.     register WAD_INFO *winfo
  213. #endif
  214. );
  215. extern WAD_INFO *wad_open(
  216. #if defined(ANSI_C)
  217.     char *file,
  218.     boolean input,
  219.     boolean rewrite
  220. #endif
  221. );
  222. extern boolean wad_read(
  223. #if defined(ANSI_C)
  224.     register WAD_INFO *winfo,
  225.     int entry,
  226.     long resources_needed
  227. #endif
  228. );
  229. extern boolean wad_write(
  230. #if defined(ANSI_C)
  231.     register WAD_INFO *oinfo,
  232.     register WAD_INFO *winfo
  233. #endif
  234. );
  235. extern void wad_close(
  236. #if defined(ANSI_C)
  237.     register WAD_INFO *winfo
  238. #endif
  239. );
  240.  
  241. extern long nodes_make(                /* makes NODES,SSECTORS,SEGS */
  242. #if defined(ANSI_C)
  243.     DOOM_NODE **nodes,
  244.     long *nnodes,
  245.     DOOM_SSECTOR **ssecs,
  246.     long *nssecs,
  247.     DOOM_SEGS **segs,
  248.     long *nsegs,
  249.     DOOM_VERT **verts,
  250.     long *nverts,
  251.     DOOM_LINE **lines,
  252.     long *nlines
  253. #endif
  254. );
  255. extern long blockmap_make(            /* makes the BLOCKMAP */
  256. #if defined(ANSI_C)
  257.     register short **blockmap,
  258.     register DOOM_LINE *lines,
  259.     long nlines,
  260.     DOOM_VERT *verts
  261. #endif
  262. );
  263. extern long reject_make(            /* makes REJECT */
  264. #if defined(ANSI_C)
  265.     DOOM_REJECT **reject,
  266.     boolean zeroflag,
  267.     char *except,
  268.     DOOM_LINE *lines,
  269.     long nlines,
  270.     DOOM_SIDE *sides,
  271.     DOOM_VERT *verts,
  272.     DOOM_BLOCKMAP *blockmap
  273. #endif
  274. );
  275.  
  276. #define DM_Globals    1            /* now have defined these */
  277. #endif
  278.